package model.forview;

import java.util.ArrayList;

import controllers.routes;

import model.wrap.node.Node;
import model.wrap.type.Type;
import models.ConstantName;
import models.ConstantValue;

/**
 * 
 * @author pocteg
 *
 */
public class NodeContentChangeModelForView extends ContentForMainTemplate
{
    
    //----PRIVATE-ATTRIBUTS-------------------------------------------------------------------------
    private Node node;
    private ArrayList<String> contentsTitle;
    private ArrayList<String> contentsName;
    private ArrayList<String> contentsId;
    
    //----CONSTRUCTORS------------------------------------------------------------------------------
    public NodeContentChangeModelForView(Node node)
    {
	this.node = node;
	this.contentsId = this.node.getContentsId();
	this.contentsTitle = this.node.getContentsTypeTitle();
	this.contentsName = this.node.getContentsTypeName();
	setDefaultValues();
    }

    //----PUBLIC----METHODS-------------------------------------------------------------------------
    
    //----GETTERS-----------------------------------------------------------------------------------
    public Node getNode()
    {
	return this.node;
    }
    /**
     * Получить размер массивов contentsTitle, contentsName, contentsId
     * @author pocteg
     * Если все три массива(contentsTitle, contentsName, contentsId) равны, то вернет их длинну, если нет то 0.
     * @return Size of contentsTitle, contentsName, contentsId
     */
    public int getSizeArrays()
    {
	if(this.contentsId.size() == this.contentsName.size() && this.contentsName.size() == this.contentsTitle.size())
	{
	    return this.contentsId.size();
	}
	return 0;
    }
    
    /**
     * Получить заголовок контента
     * @author pocteg
     * @param index
     * @return
     */
    public String getContentTitle(int index)
    {
	return this.contentsTitle.get(index);
    }

    /**
     * Get link to content change page.
     * @author pocteg
     * @param index
     * @return url
     */
    public String getContentChangeLink(int index)
    {	
	long contentId = Long.valueOf(this.getContentId(index)).longValue();
	if( this.getContentName(index).equals(Type.STRING) )
	    return routes.Content.getPageContentChangeString(contentId).url();
	if( this.getContentName(index).equals(Type.POINT))
	    return routes.Content.getPageContentChangePoint(contentId, new Long(0), new Long(0)).url();
	if( this.getContentName(index).equals(Type.FLOAT))
	    return routes.Content.getPageContentChangeFloat(new Long(contentId)).url();
	if( this.getContentName(index).equals(Type.BYTE))
	    return routes.Content.getPageContentChangeByte(new Long(contentId)).url();
	return "#";	
    }
    
    /**
     * Получить id контента
     * @author pocteg
     * @param index
     * @return
     */
    public String getContentId(int index)
    {
	return this.contentsId.get(index);
    }
    
    /**
     * Получить имя контента
     * @author pocteg
     * @param index
     * @return
     */
    public String getContentName(int index)
    {
	return this.contentsName.get(index);
    }
    
    /**
     * @author pocteg
     * @return
     */
    public Long getNodeId()
    {
	return this.node.getId();
    }
    
    /**
     * Получить заголовок нода
     * @author pocteg
     * @return
     */
    public String getNodeTitle()
    {
	return this.node.getTitle();
    }
    
    /**
     * Получить дату создания
     * @author pocteg
     * @return
     */
    public String getNodeCreateDate()
    {
	return this.node.getCreateFormatDate();
    }
    
    public String getNodeCreater()
    {
	return this.node.getCreater().getFullName();
    }

    public String getNodeChangeDate()
    {
	return this.node.getChangeFormatDate();
    }
    
    public String getNodeChanger()
    {
	return this.node.getChanger().getFullName();
    }
    
    public String getTypeTitle()
    {
	return this.node.getType().getTitle();
    }
    
    public Long getTypeId()
    {
	return this.node.getType().getId();
    }
    
    public String getLinkToRelation()
    {
	return routes.Hierarchy.getPageNodeRelation(this.getNodeId()).url();
    }
    
    //----PROTECTED-METHODS-------------------------------------------------------------------------    
    protected void setDefaultValues()
    {
	String title = ConstantValue.getConstantValue(ConstantName.NODE_CHANGE_CONTENT_PAGE_TITLE);
	String header = ConstantValue.getConstantValue(ConstantName.NODE_CHANGE_CONTENT_PAGE_HEADER);
	String footer = ConstantValue.getConstantValue(ConstantName.NODE_CHANGE_CONTENT_PAGE_FOOTER);
	String userName = "";

	title = title != null ? title : "Изменение контента узла";
	header = header != null ? header : "Изменение контента узла";
	footer = footer != null ? footer : "Изменение контента узла";

	mainModelForView = new MainModelForView(title, userName, header, footer);
    }
}
